// 测试通义千问模型返回HTML格式的问题
const AiModelService = require('./src/services/aiModelService');
const fs = require('fs');
const path = require('path');

// 简单的测试文本
const testContent = `
Node.js是一个基于Chrome V8引擎的JavaScript运行环境。
Node.js使用了一个事件驱动、非阻塞式I/O的模型，使其轻量又高效。
Node.js的包管理器npm，是全球最大的开源库生态系统。

主要特点：
1. 非阻塞I/O
2. 事件驱动
3. 轻量高效
4. 单线程
5. 跨平台

Node.js适合开发需要处理大量并发连接但计算强度不高的应用，如聊天服务器、API服务等。
`;

async function testQwenResponse() {
  try {
    console.log('测试通义千问模型返回格式问题...');
    console.log('发送测试内容:', testContent.substring(0, 100) + '...');
    
    // 调用通义千问模型
    const response = await AiModelService.parseWithQwenLong(testContent, {
      task: 'generate_cards',
      temperature: 0.3,
      max_tokens: 1000
    });
    
    // 打印原始响应
    console.log('\n原始响应:');
    console.log('成功状态:', response.success);
    console.log('结果前200字符:', response.result.substring(0, 200) + '...');
    
    // 检查是否包含HTML标签
    const hasHtmlTags = /<[^>]*>/.test(response.result);
    console.log('\nHTML检测:');
    console.log('包含HTML标签:', hasHtmlTags);
    
    if (hasHtmlTags) {
      console.log('检测到的HTML标签:', response.result.match(/<[^>]*>/g).slice(0, 5));
      
      // 尝试移除HTML标签
      const cleanedText = response.result.replace(/<[^>]*>?/gm, '');
      console.log('\n移除HTML标签后前200字符:', cleanedText.substring(0, 200) + '...');
      
      // 将原始响应保存到文件
      const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
      const htmlResponseFile = path.join(__dirname, `qwen-html-response-${timestamp}.txt`);
      fs.writeFileSync(htmlResponseFile, response.result);
      console.log(`\n原始HTML响应已保存至: ${htmlResponseFile}`);
    }
    
    // 尝试解析JSON
    try {
      console.log('\n尝试直接解析JSON:');
      const jsonData = JSON.parse(response.result);
      console.log('解析成功!');
      console.log('卡片数量:', Array.isArray(jsonData) ? jsonData.length : '非数组');
    } catch (e) {
      console.log('直接解析JSON失败:', e.message);
      
      // 尝试提取JSON部分
      console.log('\n尝试提取JSON部分:');
      const jsonMatch = response.result.match(/\[\s*\{[\s\S]*\}\s*\]/);
      if (jsonMatch) {
        try {
          const extractedJson = JSON.parse(jsonMatch[0]);
          console.log('成功提取并解析JSON!');
          console.log('卡片数量:', Array.isArray(extractedJson) ? extractedJson.length : '非数组');
        } catch (e2) {
          console.log('提取JSON部分失败:', e2.message);
        }
      } else {
        console.log('未找到JSON格式的内容');
      }
    }
    
    // 打印API原始响应
    console.log('\nAPI原始响应对象:');
    console.log(JSON.stringify(response.raw, null, 2));
    
  } catch (error) {
    console.error('测试失败:', error);
  }
}

// 运行测试
testQwenResponse(); 